﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using QLHXNK.BusinessLogic;

namespace QLHXNK
{
    public partial class FrmNhapChiTietChiPhiThang : Form
    {
        #region Properties
        String MonthName = "";
        int MonthlyExpensesID = -1;
        int ExpensesID = -1;

        /// <summary>
        /// action= 0: Thêm, 1: Xóa, 2: Sửa
        /// </summary>
        int action = -1;
        #endregion

        #region Form functions
        public FrmNhapChiTietChiPhiThang()
        {
            InitializeComponent();
            lblNote.Visible = false;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="op">op: 0: Thêm , 1: Xóa, 2: Sửa</param>
        /// <param name="monthName"></param>
        /// <param name="monthlyExpensesID"></param>
        /// <param name="expensesID"></param>
        public FrmNhapChiTietChiPhiThang(int op, String monthName, int monthlyExpensesID, int expensesID)
        {
            InitializeComponent();

           


            MonthName = monthName;
            MonthlyExpensesID = monthlyExpensesID;
            ExpensesID = expensesID;
            action = op;

            //Lay danh muc chi phi:
            txtThang.Text = MonthName;
            txtThang.Enabled = false;
            lblNote.Visible = false;

            getCmbExpensesList(ExpensesID);

            if (action == 2)//Sửa
            {
                prepareUpdate();
            }

            if (action == 0)//Thêm
            {
                prepareInsert();
            }
        }
        #endregion

        #region Hàm hỗ trợ
        private void FillData(String thang, String maChiPhi, String tenChiPhi, String soTien, String ghiChu)
        {
            txtMaChiPhi.Text = maChiPhi;
            txtGhiChu.Text = ghiChu;
            txtTenChiPhi.Text = tenChiPhi;
            txtSoTien.Text = soTien;


        }
        private void StateData(bool state, Color color)
        {

        }


        private void ShowNote(string note, Color foreColor)
        {
            lblNote.Visible = true;
            lblNote.ForeColor = foreColor;
            lblNote.Text = note;
        }
        private void prepareUpdate()
        {
            btnXoa.Enabled = false;

            if (ExpensesID != -1)
            {
                txtMaChiPhi.Enabled = false;
                txtTenChiPhi.Enabled = false;

                if (cmbDanhMucChiPhi.Items.Count > 0)
                {
                    cmbDanhMucChiPhi.SelectedValue = ExpensesID;
                }
            }
        }
        private void getCmbExpensesList(int selectedExpensesID)
        {
            //Danh muc chi phi:

            cmbDanhMucChiPhi.DisplayMember = "info";
            cmbDanhMucChiPhi.ValueMember = "ID";
            DataTable table = Item.getItemList("SELECT ID, expenses_code + ' - ' + expenses_name as info FROM Expenses");
            if (table == null)
            {
                table = new DataTable();
                table.Columns.Add("info");
                table.Columns.Add("ID");
            }

            DataRow row = table.NewRow();
            row["ID"] = -1;
            row["info"] = "Thêm danh mục chi phí mới";
            table.Rows.InsertAt(row, 0);

            cmbDanhMucChiPhi.DataSource = table;
            cmbDanhMucChiPhi.SelectedValue = selectedExpensesID;
        }

        /// <summary>
        /// return new expenesID
        /// </summary>
        /// <returns></returns>
        private int getNewExpenses()
        {
            int ID = -1;

            int r = Expenses.Insert(txtMaChiPhi.Text, txtTenChiPhi.Text, "");
            if (r == 1)
            {
                ID = MyDataTransfer.getLastID("Expenses");
            }

            return ID;
        }
        private void ProcessData()
        {
            //ExpensesID:
            try
            {
                ExpensesID = int.Parse(cmbDanhMucChiPhi.SelectedValue.ToString());
            }
            catch
            {
                ExpensesID = -1;
            }
            txtMaChiPhi.Text = txtMaChiPhi.Text.Trim();
            txtTenChiPhi.Text = txtTenChiPhi.Text.Trim();
            txtGhiChu.Text = txtGhiChu.Text.Trim();

        }
        private bool ValidateData()
        {
            bool isValidate = true;


            //Danh muc chi phi
            if (ExpensesID == -1)
            {
                if (txtMaChiPhi.Text == "")
                {
                    errorProvider1.SetError(txtMaChiPhi, "Bạn chưa nhập mã chi phí");
                    isValidate = false;
                }
                if (txtTenChiPhi.Text == "")
                {
                    errorProvider1.SetError(txtTenChiPhi, "Bạn chưa nhập tên chi phí");
                    isValidate = false;
                }
            }

            //Số tiền:
            if (txtSoTien.Text != "")
            {
                try
                {
                    Double d = Double.Parse(txtSoTien.Text);
                }
                catch
                {
                    errorProvider1.SetError(txtSoTien, "Tỉ giá không hợp lệ");
                    isValidate = false;
                }
            }
            else
            {
                errorProvider1.SetError(txtSoTien, "Bạn chưa nhập số tiền");
                isValidate = false;
            }

            return isValidate;
        }

        #endregion

        #region Lưu
        private void Save()
        {
            lblNote.Visible = false;
            ProcessData();                  //Tiền xữ lý dữ liệu nhập(xử lý khoản trắng...)

            if (ValidateData() == false)
            {
                ShowNote("Dữ liệu không hợp lệ. Hãy kiểm tra lại!", Color.Red);
                return;                     //nếu dữ liệu nhập không hợp lệ thì thoát và thông báo
            }

            if (action == -1)
            {
                ShowNote("Bạn hãy chọn chức năng: Thêm mới, Xoá, Sửa", Color.Green);
                return;
            }


            //Lưu new expenses (nếu có)
            if (ExpensesID == -1)
                ExpensesID = getNewExpenses();
            if (ExpensesID == -1)
            {
                ShowNote("Lỗi! Chưa thêm danh mục chi phí mới được. Xin thử lại", Color.Red);
                return;
            }

            //Thêm:
            if (action == 0)//Thêm
            {
                doInsert();
                return;
            }

            //Sửa:
            if (action == 2)//Sửa
            {
                doUpdate();
                return;
            }


        }
        #endregion

        #region Thêm
        private void prepareInsert()
        {
            MonthlyExpensesID = -1;
            ExpensesID = -1;
            cmbDanhMucChiPhi.SelectedValue = -1;
            txtTenChiPhi.Enabled = true;
            txtMaChiPhi.Enabled = true;
            txtSoTien.Enabled = true;
            txtGhiChu.Enabled = true;
            txtThang.Enabled = true;
            action = 0;
            ShowNote("Bạn hãy nhập thông tin rồi click Lưu", Color.Blue);
        }
        private void doInsert()
        {
            int monthlyExpensesExistedID = Monthly_Expenses.Existed(MonthName, ExpensesID.ToString());
            int r = 0;
            if (monthlyExpensesExistedID == -1)//chưa tồn tại => thêm vào
            {
                r = Monthly_Expenses.Insert(MonthName, ExpensesID.ToString(), txtSoTien.Text, txtGhiChu.Text);
            }
            else//tồn tại => update
            {
                r = Monthly_Expenses.Update(monthlyExpensesExistedID, MonthName, ExpensesID.ToString(), txtSoTien.Text, txtGhiChu.Text);
            }

            if (r == 1)
            {
                ShowNote("Lưu thành công", Color.Green);
                btnXoa.Enabled = true;
                btnSua.Enabled = true;
                action = -1;

                //txtSoTien.Enabled = false;
                //txtGhiChu.Enabled = false;
            }
            else
            {
                ShowNote("Lỗi! Lưu không thành công. Xin thử lại", Color.Red);
            }


        }
        #endregion

        #region Xóa
        private void doDelete()
        {
            DialogResult resultDlg = MessageBox.Show("Bạn muốn xoá chi tiết chi phí này", "Xoá", MessageBoxButtons.YesNo);
            if (resultDlg == DialogResult.Yes)
            {
                if (MonthlyExpensesID != -1)
                {
                    if (Monthly_Expenses.Delete(MonthlyExpensesID) == 1)
                    {
                        ShowNote("Xóa thành công", Color.Blue);
                        FillData(MonthName, "", "", "", "");
                        cmbDanhMucChiPhi.SelectedValue = -1;
                        action = -1;
                    }
                    else
                        ShowNote("Xóa không thành công", Color.Red);
                }
            }
        }
        #endregion

        #region Sửa
        private void doUpdate()
        {
            MonthName = txtThang.Text;
            int r = Monthly_Expenses.Update(MonthlyExpensesID, MonthName, ExpensesID.ToString(), txtSoTien.Text, txtGhiChu.Text);
            if (r == 1)
            {
                ShowNote("Lưu thành công", Color.Green);

                btnXoa.Enabled = true;
                ////txtGhiChu.Enabled = false;
                ////txtSoTien.Enabled = false;
                //action = -1;
            }
            else
            {
                ShowNote("Lỗi! Lưu không thành công. Xin thử lại", Color.Red);
            }

        }
        #endregion
        private void btnLuu_Click(object sender, EventArgs e)
        {
            Save();
        }

        private void cmbDanhMucChiPhi_SelectedIndexChanged(object sender, EventArgs e)
        {
            int ExpensesID = -1;

            try
            {
                ExpensesID = int.Parse(cmbDanhMucChiPhi.SelectedValue.ToString());
            }
            catch
            {
                ExpensesID = -1;
            }

            if (ExpensesID == -1)
            {
                cmbDanhMucChiPhi.SelectedValue = -1;

                FillData(MonthName, "", "", "", "");
                txtTenChiPhi.Enabled = true;
                txtMaChiPhi.Enabled = true;
            }
            else
            {
                bool existed = false;
                DataTable table = MyDataTransfer.executeQueryCommand(String.Format("SELECT m.ID, e.expenses_name, e.expenses_code, m.amount, m.remark FROM Monthly_Expenses m, Expenses e WHERE e.ID = m.expenses_id AND m.month_name = '{0}' AND m.expenses_id = {1}", MonthName, ExpensesID));
                if (table != null)
                {
                    if (table.Rows.Count == 1)
                    {
                        DataRow row = table.Rows[0];
                        try
                        {
                            MonthlyExpensesID = int.Parse(row["ID"].ToString());
                            FillData(MonthName, row["expenses_code"].ToString(), row["expenses_name"].ToString(), row["amount"].ToString(), row["remark"].ToString());
                            existed = true;
                        }
                        catch
                        {
                            FillData(MonthName, "", "", "", "");
                        }
                        txtTenChiPhi.Enabled = false;
                        txtMaChiPhi.Enabled = false;
                    }
                }

                if (existed == false)
                {
                    DataTable t = Expenses.getExpensesList(String.Format("SELECT * FROM Expenses WHERE ID = {0}", ExpensesID));
                    if (t != null && t.Rows.Count == 1)
                    {
                        FillData(MonthName, t.Rows[0]["expenses_code"].ToString(), t.Rows[0]["expenses_name"].ToString(), "", "");
                        txtTenChiPhi.Enabled = false;
                        txtMaChiPhi.Enabled = false;
                    }
                }


            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            prepareUpdate();
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            prepareInsert();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            doDelete();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}